# Pandas 在数据分析、数据可视化方面有着较为广泛的应用，
# Pandas 对 Matplotlib 绘图软件包的基础上单独封装了一个plot()接口，通过调用该接口可以实现常用的绘图操作。
# Pandas 之所以能够实现了数据可视化，主要利用了 Matplotlib 库的 plot() 方法，它对 plot() 方法做了简单的封装，因此直接调用该接口。
import pandas as pd
import numpy as np
# 使用pandas画图一定要导入matplotlib.pyplot，不然不显示
import matplotlib.pyplot as plt

# 创建包含时间序列的数据
df = pd.DataFrame(np.random.randn(8, 4), index=pd.date_range('2/1/2020', periods=8), columns=list('ABCD'))
df.plot()
# Pandas 会自动调用 gct().autofmt_xdate() 来格式化 x 轴

# 柱状图：bar() 或 barh()
# 直方图：hist()
# 箱状箱：box()
# 区域图：area()
# 散点图：scatter()
df2 = pd.DataFrame(np.random.rand(10, 5), columns=['a', 'b', 'c', 'd', 'e'])
# 或使用df.plot(kind="bar")
df2.plot.bar()
# 通过设置参数stacked=True可以生成柱状堆叠图
df2.plot(kind="bar", stacked=True)
# 水平柱状图
df.plot.barh(stacked=True)
plt.show()

# lot.hist() 可以实现绘制直方图
# 指定箱数为15
df.plot.hist(bins=15)
# 每一列数据都绘制一个直方图
df = pd.DataFrame({'A': np.random.randn(100) + 2, 'B': np.random.randn(100), 'C':
    np.random.randn(100) - 2, 'D': np.random.randn(100) + 3}, columns=['A', 'B', 'C', 'D'])
# 使用diff绘制
df.diff().hist(color="r", alpha=0.5, bins=15)

#  Series.box.plot() 、DataFrame.box.plot() 或者 DataFrame.boxplot() 方法来绘制箱型图
df = pd.DataFrame(np.random.rand(10, 4), columns=['A', 'B', 'C', 'D'])
df.plot.box()

# Series.plot.area() 或 DataFrame.plot.area() 方法来绘制区域图
df = pd.DataFrame(np.random.rand(5, 4), columns=['a', 'b', 'c', 'd'])
df.plot.area()

# DataFrame.plot.scatter() 方法来绘制散点图
df = pd.DataFrame(np.random.rand(30, 4), columns=['a', 'b', 'c', 'd'])
df.plot.scatter(x='a', y='b')

# 饼状图可以通过 DataFrame.plot.pie()
df = pd.DataFrame(3 * np.random.rand(4), index=['go', 'java', 'c++', 'c'], columns=['L'])
df.plot.pie(subplots=True)
